package br.unp.tasi.loja.entidades;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * Entidade Produto
 * @author jfrank
 */
@Entity
@Table(name = "produto")
public class Produto implements Serializable {

  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String nome;
  @Lob
  @Column(length = 512)
  private String descricao;
  /**
   * Preco em centavos 
   */
  @Column(name = "preco")
  private Long precoEmCentavos;
  private Long unidadesemestoque;
  private boolean emoferta;
  private boolean temimagem;
  /**
   * Relacionamento muitos para um entre Produto e Categoria
   */
  @ManyToOne
  private Categoria categoria;

  public Produto() {
  }

  /**
   * URL da imagem
   * @return
   */
  public String getFotoURL() {
    if (temimagem) {
      return getId() + ".jpg";
    } else {
      return "sem_imagem.jpg";
    }
  }

  @Override
  public int hashCode() {
    int hash = 0;
    hash += (getId() != null ? getId().hashCode() : 0);
    return hash;
  }

  @Override
  public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Produto)) {
      return false;
    }
    Produto other = (Produto) object;
    if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.id.equals(other.id))) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    return "br.unp.tasi.loja.entidades.Produto[id=" + getId() + "]";
  }

  /**
   * @return the id
   */
  public Long getId() {
    return id;
  }

  /**
   * @param id the id to set
   */
  public void setId(Long id) {
    this.id = id;
  }

  /**
   * @return the nome
   */
  public String getNome() {
    return nome;
  }

  /**
   * @param nome the nome to set
   */
  public void setNome(String nome) {
    this.nome = nome;
  }

  /**
   * @return the descricao
   */
  public String getDescricao() {
    return descricao;
  }

  /**
   * @param descricao the descricao to set
   */
  public void setDescricao(String descricao) {
    this.descricao = descricao;
  }

  /**
   * @return the unidadesemestoque
   */
  public long getUnidadesemestoque() {
    return unidadesemestoque;
  }

  /**
   * @param unidadesemestoque the unidadesemestoque to set
   */
  public void setUnidadesemestoque(long unidadesemestoque) {
    this.unidadesemestoque = unidadesemestoque;
  }

  /**
   * @return the emoferta
   */
  public boolean isEmoferta() {
    return emoferta;
  }

  /**
   * @param emoferta the emoferta to set
   */
  public void setEmoferta(boolean emoferta) {
    this.emoferta = emoferta;
  }

  /**
   * @return the categoria
   */
  public Categoria getCategoria() {
    return categoria;
  }

  /**
   * @param categoria the categoria to set
   */
  public void setCategoria(Categoria categoria) {
    this.categoria = categoria;
  }

  /**
   * @return the preco
   */
  public Double getPreco() {
    return precoEmCentavos / 100.0;
  }

  /**
   * @param preco the preco to set
   */
  public void setPreco(Double preco) {
    this.precoEmCentavos = Math.round(preco * 100);
  }

  /**
   * @return the precoEmCentavos
   */
  public Long getPrecoEmCentavos() {
    return precoEmCentavos;
  }

  /**
   * @param precoEmCentavos the precoEmCentavos to set
   */
  public void setPrecoEmCentavos(Long precoEmCentavos) {
    this.precoEmCentavos = precoEmCentavos;
  }

  /**
   * @return the temimagem
   */
  public boolean isTemimagem() {
    return temimagem;
  }

  /**
   * @param temimagem the temimagem to set
   */
  public void setTemimagem(boolean temimagem) {
    this.temimagem = temimagem;
  }
}
